前一篇第 6 天是提到「SwiftUI 中 ViewModifier 的基本實作」,雖然本系列文章基本上沒有前後關聯,如果你是還沒讀過前一篇的讀者,也推薦你去讀讀。
需要建立多欄位的清單,就需要改用 LazyVGrid 搭配 GridItem 即可
let columns = [GridItem(.flexible()), GridItem(.flexible())]
LazyVGrid(columns: columns) {
// ...
}
struct ContentView: View {
@State var vehicles = ["car", "bus", "airplane", "tram", "scooter"]
let columns = [GridItem(.flexible()), GridItem(.flexible())]
var body: some View {
VStack(alignment: .leading) {
ScrollView {
LazyVGrid(columns: columns) {
ForEach($vehicles, id:\.self) { vehicle in
VehicleView(name: vehicle)
}
}
.padding()
}
}
}
}
struct VehicleView: View {
@Binding var name: String
var body: some View {
VStack {
Image(systemName: name)
.resizable()
.aspectRatio(contentMode: .fit)
.padding()
.frame(width: .infinity, height: 100)
Text(name)
}
.frame(maxWidth: .infinity)
.padding()
.background(
RoundedRectangle(cornerRadius: 10)
.stroke()
.foregroundStyle(Color.gray)
)
}
}
如果想要更多欄位就只要新增 GridItem 即可
let columns = [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())]
設定方式如下
GridItem(.flexible(), spacing: 16.0)
替換掉第一個之後,就可以看出設定後的效果
到這裡就是在 SwiftUI 該如何實作多欄位的版面
如果有疑問、回饋,歡迎留言討論
那今天的 SwiftUI 的大大小小就到這邊,以上,明天見!
本篇使用到的 UI 元件和 modifiers 基本上沒有受到版本更新影響因此 Xcode 14 等環境下使用也是沒問題的。